﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FrbaBus.AbmCiudades
{
    public partial class FormAbmCiudades : Form
    {
        //Variables
        private Constantes.ModoAbm modoABM = Constantes.ModoAbm.Ninguno;
        String codigoCiudad;    //Almacena la ciudad que se esta modificando si corresponde

        //Main
        public FormAbmCiudades()
        {
            InitializeComponent();

            //Cargar datos en la tabla
            CrearColumnasTabla();
            CargarTabla();

            BotonesEdicion(false);
        }

        private void buBuscar_Click(object sender, EventArgs e)
        {
            //Vuelve a cargar los datos en la tabla considerando los filtros
            CargarTabla();
        }

        private void buLimpiar_Click_1(object sender, EventArgs e)
        {
            //Limpiar filtro
            txFiltroCiudad.Text = "";
            rbTodos.Checked = true;
        }

        private void buGuardar_Click_1(object sender, EventArgs e)
        {
            String query;

            //Crea o modifica el registro que se esta editando
            txCiudad.Text.Trim();
            if (txCiudad.TextLength > 0)
            {
                if (modoABM == Constantes.ModoAbm.Modificacion)
                {
                    //Actualiza los cambios
                    query = "UPDATE THE_BEST_IAS.ciudades SET ciu_nombre = '";
                    query += txCiudad.Text;
                    query += "', ciu_eliminada = ";

                    if (chHabilitado.Checked)
                    {
                        query += "0";
                    }
                    else
                    {
                        query += "1";
                    }

                    query += " WHERE ciu_codigo = " + codigoCiudad;

                    SqlDataReader dr = DbHelper.ExecuteQuery(query);

                    BotonesEdicion(false);

                    //Actualizar tabla
                    CargarTabla();
                }
                else
                {
                    //Crear registro
                    query = "INSERT INTO THE_BEST_IAS.ciudades (ciu_nombre,ciu_eliminada) VALUES ('";
                    query += txCiudad.Text + "', ";
                    
                    if (chHabilitado.Checked){
                        query +="0)";
                    }else
                    {
                        query += "1)";
                    }

                    SqlDataReader dr = DbHelper.ExecuteQuery(query);

                    BotonesEdicion(false);

                    //Actualizar tabla
                    CargarTabla();
                }

            }
            else
            {
                MessageBox.Show("Escriba el nombre de la ciudad", "Datos Inválidos");
            }
        }

        private void buCancelar_Click(object sender, EventArgs e)
        {
            //Cancela el alta o modificación de un registro
            BotonesEdicion(false);
        }

        //Muestra todos los datos de las ciudades en la tabla
        private void CargarTabla() {
            bool primerFiltro = true;
            char valorEliminado;

            tabla.Rows.Clear();

            string query;

            query = "SELECT * FROM THE_BEST_IAS.ciudades";

            //Aplicar los filtros
            txFiltroCiudad.Text.Trim();
            if (txFiltroCiudad.Text.Length > 0)
            {
                query += " WHERE ciu_nombre like '%" + txFiltroCiudad.Text + "%'";
                primerFiltro = false;
            }

            if (!rbTodos.Checked)
            {
                if (rbActivo.Checked)
                    valorEliminado='0';   //Solo activos
                else
                    valorEliminado='1';   //Solo eliminados

                //Añadir
                if (primerFiltro)
                {
                    query += " WHERE";
                    primerFiltro = false;
                }
                else
                {
                    query += " AND";
                }
                query += " ciu_eliminada = " + valorEliminado;
            }

            query += " ORDER BY 1";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    tabla.Rows.Add(new object[] { 
                           dr["ciu_codigo"].ToString().Trim(), 
                           dr["ciu_nombre"].ToString().Trim(), 
                           dr["ciu_eliminada"].ToString().Trim()
                         });
                }
            }
            else
            {
                MessageBox.Show("No se encontraron datos, por favor, considerar sus filtros", "INFORMACION");
            }
        }

        //Inicializar columnas
        private void CrearColumnasTabla()
        {
            tabla.Columns.Add("ciu_codigo", "CODIGO");
            tabla.Columns.Add("ciu_nombre", "NOMBRE");
            tabla.Columns.Add("ciu_eliminada", "ELIMINADA");
        }

        //Habilita o deshabilita la opción para crear o editar un registro
        private void BotonesEdicion(bool habilitar)
        {
            if (habilitar)
            {
                grEdicion.Enabled = true;
                buGuardar.Enabled = true;
                buCancelar.Enabled = true;
            }
            else
            {
                grEdicion.Enabled = false;
                buGuardar.Enabled = false;
                buCancelar.Enabled = false;
            }
            LimpiarEdicion();
        }

        private void buNuevo_Click(object sender, EventArgs e)
        {
            modoABM = Constantes.ModoAbm.Alta;
            BotonesEdicion(true);
        }

        private void buModificar_Click(object sender, EventArgs e)
        {
            String ciudadMod;

            //Obtener nombre de la ciudad a modificar
            if (tabla.SelectedRows.Count > 0)
            {
                BotonesEdicion(true);
                ciudadMod = tabla.SelectedRows[0].Cells[1].Value.ToString();
                codigoCiudad = tabla.SelectedRows[0].Cells[0].Value.ToString();

                if (tabla.SelectedRows[0].Cells[2].Value.ToString() == "1")
                {
                    chHabilitado.Checked = false;
                }
                else
                {
                    chHabilitado.Checked = true;
                }

                modoABM = Constantes.ModoAbm.Modificacion;
                
                txCiudad.Text = ciudadMod;
            }
            else
            {
                MessageBox.Show("Seleccione una registro.", "Error");
            }
        }

        private void buBaja_Click(object sender, EventArgs e)
        {
            //Da de baja la ciudad seleccionada
            String query;
            String ciudadMod;

            if (tabla.SelectedRows.Count > 0)
            {
                ciudadMod = tabla.SelectedRows[0].Cells[1].Value.ToString();

                //Determinar si esta habilitado
                if (tabla.SelectedRows[0].Cells[2].Value.ToString() == "0")
                {

                    codigoCiudad = tabla.SelectedRows[0].Cells[0].Value.ToString();

                    if (MessageBox.Show("¿Dar de baja la ciudad '" + ciudadMod + "'?", "Baja", MessageBoxButtons.OKCancel) == DialogResult.OK)
                    {
                        query = "UPDATE THE_BEST_IAS.ciudades SET ciu_eliminada = 1 WHERE ciu_codigo = " + codigoCiudad;

                        SqlDataReader dr = DbHelper.ExecuteQuery(query);

                        //Actualizar tabla
                        CargarTabla();
                    }
                }
                else
                {
                    MessageBox.Show("La ciudad '" + ciudadMod + "' ya esta dado de baja.", "Error");
                }

                
            }
            else
            {
                MessageBox.Show("Seleccione una registro.", "Error");
            }
        }

        //Limpia los datos de edición
        private void LimpiarEdicion()
        {
            txCiudad.Text = "";
            chHabilitado.Checked = true;
        }

    }
}
